package restful.api;

import jakarta.ws.rs.Consumes;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import org.jboss.resteasy.plugins.providers.multipart.InputPart;
import org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataInput;
import restful.bean.Result;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.List;
import java.util.Map;

@Path("upload")
public class FileAPI {
    // 图片访问路径：http:\\127.0.0.1:8080/restful/images/donghua.jpeg
    // 从上传的 InputPart 中获取文件名
    private String getFileName(InputPart inputPart) {
        try {
            // 获取 Content-Disposition 头部中的文件名
            String contentDisposition = inputPart.getHeaders().getFirst("Content-Disposition");
            String[] items = contentDisposition.split(";");
            for (String item : items) {
                if (item.trim().startsWith("filename")) {
                    return item.substring(item.indexOf("=") + 2, item.length() - 1);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "unknown";
    }

    @POST
    @Path("/file")
    @Consumes("multipart/form-data")
    @Produces("application/json;charset=UTF-8")
    public Result fileUp(MultipartFormDataInput data) {
        try{
            // 获取上传的文件部分
            Map<String, List<InputPart>> formData = data.getFormDataMap();
            List<InputPart> fileParts = formData.get("data");  // "data" 是前端表单中文件字段的名称

            if (fileParts == null || fileParts.isEmpty()) {
                return new Result(1,"没有文件上传",null," ");
            }

            // 获取上传的第一个文件的文件名
            String fileName = getFileName(fileParts.get(0));
            // 指定上传路径
            String uploadDir = "C:\\RESTful\\workspace\\restful2\\src\\main\\webapp\\images\\";  // 确保目录存在
            File directory = new File(uploadDir);
            if (!directory.exists()) {
                directory.mkdirs();  // 如果文件夹不存在，则创建它
            }

            String filePath = uploadDir + fileName;
            //拷贝文件存放服务器目录（单文件）
            InputStream fis = fileParts.get(0).getBody(InputStream.class, null);
            FileOutputStream fos = new FileOutputStream(filePath);

            //2.拷贝
            int len ;
            byte[] bytes = new byte[1024];
            while ((len=fis.read(bytes))!=-1){
                fos.write(bytes,0,len);
            }
            fos.flush();
            fos.close();
            fis.close();

            // 返回文件名的响应
            return new Result(1, "上传成功", fileName, "");
        } catch (Exception e) {
            e.printStackTrace();
            return new Result(0,"上传失败",null,"");
        }
    }
}

